------------------------------------------------------------------------------------------------------------------
USE ReportesGerenciales;
GO

----------------------------------------------------------------------------------------------------------------
DROP PROCEDURE ObtenerCheque;
GO

CREATE PROCEDURE ObtenerCheque (@numero_cheque varchar(10))
AS
BEGIN
	SELECT
		c.no_vendedor,
		c.beneficiario,
		c.tipo_cheque,
		c.cuenta_banco,
		c.numero_cheque,
		c.incluido_cierre_contable,
		c.cheque_entregado,
		c.fecha_cheque,
		c.fecha_creacion_cheque,
		c.emitido_conciliacion_bancaria,
		c.retenido,
		c.cantidad
	FROM Cheques c
	WHERE c.numero_cheque = @numero_cheque
END;
GO

----------------------------------------------------------------------------------------------------------------
DROP PROCEDURE ListarTiposCheque;
GO

CREATE PROCEDURE ListarTiposCheque
AS
BEGIN
	SELECT DISTINCT c.tipo_cheque as tipo, c.tipo_cheque as nombre FROM Cheques c
END;
GO

----------------------------------------------------------------------------------------------------------------
DROP PROCEDURE ListarCheques;
GO

CREATE PROCEDURE ListarCheques (@inicio as integer, @total as integer, @tipo_cheque varchar(1), @numero_cheque varchar(10), @cheque_entregado varchar(1), @vendedor varchar(10), @beneficiario varchar(40))
AS
BEGIN
	DECLARE @sql varchar(1024);

	SET @sql = 
	'SELECT TOP ('+CONVERT(varchar, @total)+') '+
		'c.no_vendedor, '+
		'c.beneficiario, '+
		'c.tipo_cheque, '+
		'c.cuenta_banco, '+
		'c.numero_cheque, '+
		'c.incluido_cierre_contable, '+
		'c.cheque_entregado, '+
		'c.fecha_cheque, '+
		'c.fecha_creacion_cheque, '+
		'c.emitido_conciliacion_bancaria, '+
		'c.retenido, '+
		'c.cantidad '+
	'FROM Cheques c '+
	'WHERE c.numero_cheque NOT IN ( '+
		'SELECT TOP ('+CONVERT(varchar, @inicio)+') numero_cheque FROM Cheques '+
		'WHERE tipo_cheque = ISNULL('+dbo.EscapeString(@tipo_cheque)+', tipo_cheque) '+
		'AND numero_cheque LIKE ISNULL('+dbo.EscapeStringForLike(@numero_cheque)+', numero_cheque) '+
		'AND no_vendedor = ISNULL('+dbo.EscapeString(@vendedor)+', no_vendedor) '+
		'AND beneficiario LIKE ISNULL('+dbo.EscapeStringForLike(@beneficiario)+', beneficiario) '+
		'AND cheque_entregado = ISNULL('+dbo.EscapeString(@cheque_entregado)+', cheque_entregado) '+
	') '+
	'AND c.tipo_cheque = ISNULL('+dbo.EscapeString(@tipo_cheque)+', c.tipo_cheque) '+
	'AND c.numero_cheque LIKE ISNULL('+dbo.EscapeStringForLike(@numero_cheque)+', c.numero_cheque)'+
	'AND c.no_vendedor = ISNULL('+dbo.EscapeString(@vendedor)+', c.no_vendedor) '+
	'AND c.beneficiario LIKE ISNULL('+dbo.EscapeStringForLike(@beneficiario)+', c.beneficiario) '+
	'AND c.cheque_entregado = ISNULL('+dbo.EscapeString(@cheque_entregado)+', c.cheque_entregado)';

	EXEC (@sql);
END;
GO

----------------------------------------------------------------------------------------------------------------
DROP PROCEDURE ContarCheques;
GO

CREATE PROCEDURE ContarCheques (@tipo_cheque varchar(1), @numero_cheque varchar(10), @cheque_entregado varchar(1), @vendedor varchar(10), @beneficiario varchar(40))
AS
BEGIN
	SELECT COUNT(*) as num FROM Cheques c
	WHERE c.tipo_cheque = ISNULL(@tipo_cheque, c.tipo_cheque)
	AND c.numero_cheque LIKE dbo.WhenNull(@numero_cheque, c.numero_cheque, '%'+@numero_cheque+'%')
	AND c.cheque_entregado = ISNULL(@cheque_entregado, c.cheque_entregado)
	AND c.no_vendedor = ISNULL(@vendedor, c.no_vendedor)
	AND c.beneficiario LIKE dbo.WhenNull(@beneficiario, c.beneficiario, '%'+@beneficiario+'%')
END;
GO

----------------------------------------------------------------------------------------------------------------
DROP PROCEDURE MarcarCheque;
GO

CREATE PROCEDURE MarcarCheque (@numero_cheque varchar(10), @valor char(1))
AS
BEGIN
	DECLARE @cuenta_banco varchar(10);
	DECLARE @cantidad numeric(16,2);
	DECLARE @estado char(1);

	SET @cuenta_banco = (SELECT cuenta_banco FROM Cheques WHERE numero_cheque=@numero_cheque);
	SET @cantidad = (SELECT cantidad FROM Cheques WHERE numero_cheque=@numero_cheque);
	SET @estado = (SELECT cheque_entregado FROM Cheques WHERE numero_cheque=@numero_cheque);

	UPDATE Cheques SET cheque_entregado=@valor WHERE numero_cheque=@numero_cheque;

	IF @valor=1 AND @valor<>@estado UPDATE Cuenta_Banco SET saldo=saldo-@cantidad WHERE cuenta_banco=@cuenta_banco;
	IF @valor=0 AND @valor<>@estado UPDATE Cuenta_Banco SET saldo=saldo+@cantidad WHERE cuenta_banco=@cuenta_banco;
END;
GO

----------------------------------------------------------------------------------------------------------------
-- REHABILITAR
-- GRANT EXECUTE ON ObtenerCheque TO master
-- GRANT EXECUTE ON ListarTiposCheque TO master
-- GRANT EXECUTE ON ContarCheques TO master
-- GRANT EXECUTE ON ListarCheques TO master

-- GRANT EXECUTE ON ObtenerCheque TO usuario
-- GRANT EXECUTE ON ListarTiposCheque TO usuario
-- GRANT EXECUTE ON ContarCheques TO usuario
-- GRANT EXECUTE ON ListarCheques TO usuario
